<?php
class AbstratoRelacionado extends Abstrato {
	
	protected $tabelaRelacionada, $mRelacionamento, $campoRelacionado;
	
	function __construct($tabela, $tabelaRelacionada, $validacoesRelacionado = array(), $validacoes = array(), $banco = null) {
		parent::__construct($tabela, $validacoes);
		$this->tabelaRelacionada = $tabelaRelacionada;
		$this->mRelacionamento = new Abstrato($tabelaRelacionada, $validacoesRelacionado, $banco);
		$this->campoRelacionado = 'id_' . $this->tabelaRelacionada;
	}
	
	function insere($umRegistro, $procedure) {
		$rsRelacionado = $umRegistro[$this->tabelaRelacionada];
		unset($umRegistro[$this->tabelaRelacionada]);
		$erros = $this->mRelacionamento->insere($rsRelacionado, 'proc_insere_' . $this->tabelaRelacionada);
		if (is_numeric($erros)) {
			$umRegistro[$this->campoRelacionado] = $erros;
			$erros = parent::insere($umRegistro, $procedure);
		}
		return $erros;
	}
	
	function edita($umRegistro, $procedure, $valor = null, $campo = 'id') {
		$rsRelacionado = $umRegistro[$this->tabelaRelacionada];
		unset($umRegistro[$this->tabelaRelacionada]);
		$erros = parent::edita($umRegistro, $procedure, $valor, $campo);
		if (empty($erros)) {
			$erros = $this->mRelacionamento->edita($rsRelacionado, 'proc_edita_' . $this->tabelaRelacionada, $umRegistro[$this->campoRelacionado], $campo);
		}
		return $erros;
	}
	
}